﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Security;
using CAOS.UnityOfWork;
using CAOS.Facade;

namespace CAOS.Web.Controllers
{
    public class BaseController : Controller
    {
        private UnidadeDeTrabalho unidadeDeTrabalho;

        public UnidadeDeTrabalho UnidadeDeTrabalho
        {
            get
            {
                if (this.unidadeDeTrabalho == null)
                {
                    this.unidadeDeTrabalho = new UnidadeDeTrabalho();
                }

                return unidadeDeTrabalho;
            }
        }

        public Configuracao Configuracao
        {
            get
            {
                var config = Session["Configuracao"] as Configuracao;

                if (config == null)
                {
                    FormsAuthentication.SignOut();
                }

                return config;
            }
            protected set
            {
                Session["Configuracao"] = value;
            }
        }

        #region Facades

        private UsuarioFacade usuarioFacade = null;

        public UsuarioFacade UsuarioFacade
        {
            get
            {
                if (usuarioFacade != null)
                {
                    return usuarioFacade;
                }

                usuarioFacade = new UsuarioFacade(this.UnidadeDeTrabalho);
                return usuarioFacade;
            }
        }

        private AcessoFacade acessoFacade = null;

        public AcessoFacade AcessoFacade
        {
            get
            {
                if (acessoFacade != null)
                {
                    return acessoFacade;
                }

                acessoFacade = new AcessoFacade(this.UnidadeDeTrabalho);
                return acessoFacade;
            }
        }

        private PapelFacade papelFacade = null;

        public PapelFacade PapelFacade
        {
            get
            {
                if (papelFacade != null)
                {
                    return papelFacade;
                }

                papelFacade = new PapelFacade(this.UnidadeDeTrabalho);
                return papelFacade;
            }
        }

        #endregion
    }
}
